package com.wangrui.quartz.controller;

import com.wangrui.quartz.schedule.QuartzJob;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
public class QuartzController {
    @Autowired
    private Scheduler scheduler;

    @GetMapping("/addJob")
    public String addJob(){
        System.out.println("--------------------注入定时任务---------------------");
        // 构建job信息
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("jobData","abc");
        JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class).
                withIdentity("myjob01")
                .setJobData(jobDataMap).build();
        //通过触发器名和cron 表达式创建 Trigger
        /**
         * Quartz中一共有四种Trigger：
         *
         * SimpleTrigger：这种触发器可以在给定时刻触发作业，并且可选择以指定的时间间隔重复。
         * CronTrigger：用过定时任务的小伙伴应该会猜到这个是干什么的吧。这个触发器可以设置一个Cron表达式，指定任务的执行周期。
         * CalendarIntervalTrigger：用于根据重复的日历时间间隔触发。
         * DailyTimeIntervalTrigger：用于根据每天重复的时间间隔触发任务的触发器。
         */
        Trigger cronTrigger = TriggerBuilder.newTrigger()
                .withIdentity("myjob01")
                .startNow()
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                .build();
        //重置启动时间
        ((CronTriggerImpl) cronTrigger).setStartTime(new Date());
        //执行定时任务
        try {
            scheduler.scheduleJob(jobDetail, cronTrigger);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
        System.out.println("--------------------定时任务注入完成---------------------");
        return "ok";
    }

    @GetMapping("/deleteJob")
    public String deleteJob() throws SchedulerException {
        JobKey jobKey = new JobKey("myJob01");
        scheduler.deleteJob(jobKey);
        return "ok";
    }
}
